考虑先选名队员,方法数为,其中,然后从名队员中钦定一名队长,方法数为,其他的队员可选可不选,有种方法。
所以总的方案数为
但是这似乎也没什么用,算这个式子的复杂度为,有组数据,总复杂度为。
经过一(cha)番(zhao)思(ti)考(jie)后发现模数,所以对于,,可以不用考虑。
所以单次查询时间复杂度为,总复杂度为,可以过。
#include <bits/stdc++.h>
#define MOD 8388608
#define MAXN 1000005
#define MAXK 30
#define ll long long
using namespace std;
ll C[MAXN][MAXK],pow2[MAXK];
inline void Init(){
for (register int i=0;i<MAXN;++i){
C[i][0]=1;
for (register int j=1;j<=min(23,i);++j){
C[i][j]=(C[i-1][j-1]+C[i-1][j])%MOD;
}
}
pow2[0]=1;
for (register int i=1;i<MAXK;++i){
pow2[i]=pow2[i-1]<<1ll;
}
}
int main(){
Init();
int T;
scanf("%d",&T);
while (T--){
ll n,k;
scanf("%lld%lld",&n,&k);
ll ans=0;
for (register int i=1;i<=min(k,23ll);++i){
ans=(ans+pow2[i-1]*(ll)i*C[n][i])%MOD;
}
printf("%lld\n",ans);
}
}
p.s.这种在模数上下坑的题目我还是第一次见到